package com.sunrise.generico.bean;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.mail.MessagingException;

import lombok.Getter;
import lombok.Setter;

import org.springframework.stereotype.Controller;

import com.sunrise.crm.repositorio.iface.UsuarioDao;
import com.sunrise.generico.entidade.HistoricoSenha;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.repositorio.iface.HistoricoSenhaDao;
import com.sunrise.generico.util.ConfigUtil;
import com.sunrise.generico.util.EmailUtil;
import com.sunrise.generico.util.MessagesUtil;
import com.sunrise.generico.util.SecurityUtil;

@ManagedBean
@ViewScoped
@Controller
public class ReiniciarSenhaBean implements Serializable {

	private static final long serialVersionUID = 7283481641262973860L;

	@Resource(name = "usuarioDaoImpl")
	@Getter
	private UsuarioDao usuarioDao;
	
	@Resource(name = "historicoSenhaDaoImpl")
	@Getter
	private HistoricoSenhaDao historicoSenhaDao;

	@Getter
	@Setter
	private String login;
	
	@Getter
	@Setter
	private String chave;
	
	@Getter
	@Setter
	private String novaSenha;

	public String recuperarSenha() throws MessagingException {
		Collection<Usuario> usuarios = getUsuarioDao().listarPorLoginEmail(getLogin());
		HistoricoSenha hSenha = null;
		for (Usuario usuario : usuarios) {
			HistoricoSenha historico = getHistoricoSenhaDao().buscarHistoricoPorUsuarioAtivo(usuario.getId());
			String chaveHistorico = SecurityUtil.randomString(256);
			if(historico == null){
				hSenha = new HistoricoSenha();
				hSenha.setChave(chaveHistorico);
				hSenha.setDataSolicitacao(new Date());
				hSenha.setUsuario(usuario);
				hSenha.setAtivo(Boolean.TRUE);
				getHistoricoSenhaDao().inserir(hSenha);
			}else {
				chaveHistorico = historico.getChave();
			}
			
			
			String html = EmailUtil.htmlEnviarSenha();
			html = html.replace("nomeUsuario", usuario.getNome());
			html = html.replace("httpEndereco", ConfigUtil.getProperty("enderecoSenha") + "?crs=" + chaveHistorico);
			EmailUtil.sendEmailUsingTemplate(usuario.getEmail(), html, "Recuperar Senha");
		}
		MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("emailEnviadoSucesso"));
		return "login.xhtml?faces-redirect=true&amp;includeViewParams=true";

	}

	public void atribuirNovaSenha(){
		getNovaSenha();
		getChave();
	}


	
	
	
}